package com.zxx.mvpPractice.model.net;

import com.zxx.mvpPractice.model.bean.RequestSmsBody;
import com.zxx.mvpPractice.model.bean.User;
import com.zxx.mvpPractice.model.net.bean.DelResponse;
import com.zxx.mvpPractice.model.bean.LoginUser;
import com.zxx.mvpPractice.model.net.bean.LoginRegisterReponse;
import com.zxx.mvpPractice.model.net.bean.LoginUserResponse;
import com.zxx.mvpPractice.model.net.bean.QuerySmsResponse;
import com.zxx.mvpPractice.model.net.bean.SmsResponse;
import com.zxx.mvpPractice.model.net.bean.UpdateLoginResponse;
import com.zxx.mvpPractice.model.net.bean.VerifyResponse;

import java.util.Map;

import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.HTTP;
import retrofit2.http.Header;
import retrofit2.http.HeaderMap;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.QueryMap;
import rx.Observable;
import rx.Observer;

/**
 * Bomb后端云Api  REST
 * Created by zhuxiaoxuan on 2016/11/1.
 */
public interface BombApi {

    /**
     * Application ID，SDK初始化必须用到此密钥
     * REST API Key，REST API请求中HTTP头部信息必须附带密钥之一
     * Secret Key，是SDK安全密钥，不可泄漏，在云端逻辑测试云端代码时需要用到
     * Master Key，超级权限Key。应用开发或调试的时候可以使用该密钥进行各种权限的操作，此密钥不可泄漏
     */
    public final static String BASE_URL = "https://api.bmob.cn";
    public static final String applicationId = "73b69a0dc5e761745e0ff77ff0b3e2cb";
    public static final String resetApiKey = "f2fda5348b69be01954edb2af8fd1a56";
    public static final String searchKey = "8a596300b6393e30";
    public static final String masterKey = "a2d0ac2d26e1a220b6a0f3be4eb8fcf5";


    /*******************************登录注册模块*****************************************/

    /**
     * 使用手机号码一键注册或登录
     * 如果手机号码存在则自动登陆。
     *
     * @return
     */
    @POST("/1/users")
    Observable<LoginRegisterReponse> loginOrRegisterUser(@Body User user);


    /**
     * 登录用户
     * 也可以使用email或者mobilePhoneNumber
     *
     * @param options
     * @return
     */
    @GET("/1/users")
    Observable<LoginRegisterReponse> loginUser(@QueryMap Map<String, String> options);

    /**
     * 请求短信验证码
     *
     * @param requestSmsBody
     * @return
     */
    @POST("1/requestSms")
    Observable<SmsResponse> requestSmsCode(@Body RequestSmsBody requestSmsBody);


    /**
     * 验证用户输入的短信验证码
     * 输入的验证码
     *
     * @param smsCode           手机号
     * @param mobilePhoneNumber
     * @return
     */
    @POST("1/verifySmsCode/{smsCode}")
    Observable<VerifyResponse> verifySms(@Path("smsCode") String smsCode, @Body String mobilePhoneNumber);


    /**
     * sms_state是发送状态，有值: SENDING-发送中，FAIL-发送失败 SUCCESS-发送成功
     * verify_state是验证码是否验证状态， 有值: true-已验证 false-未验证
     *
     * @param smsId
     * @return
     */
    @GET("1/querySms/:{smsId}")
    Observable<QuerySmsResponse> querySmsStatus(@Path("smsId") String smsId);


    /**
     * 更新用户信息
     *
     * @return
     */
    @PUT("1/users/{objectId}")
    Observable<UpdateLoginResponse> updateUser(@Path("objectId") String objectId, @Body User user);



    /*******************************
     * 查询测试bmob模块
     *****************************************/


    //查询数据
    @GET("/1/classes/LoginUser/{objectId}")
    Observable<LoginUser> queryUser(@Path("objectId") String objectId);//可用

    //查询所有数据
    @GET("/1/classes/LoginUser")
    Observable<LoginUserResponse> queryAllUser();//可用

    //添加数据
    @POST("/1/classes/LoginUser")
    Observable<LoginUser> addUser(@Body LoginUser user);//可用

    //更新数据
    @PUT("/1/classes/LoginUser/{objectId}")
    Observable<UpdateLoginResponse> updateUser(@Path("objectId") String objectId, @Body LoginUser user);

    //删除数据
    @HTTP(method = "DELETE", path = "/1/classes/LoginUser/{objectId}")
    Observable<DelResponse> deleteUser(@Path("objectId") String objectId);//可用

}
